package com.huey.utils.design.structure.proxy.demo2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 监听接口的方法的调用 --动态代理类
 * Proxy 可以理解为就是调度器，InvocationHandler 增强服务接口可以理解为代理器。
 * 所以我个人理解动态代理其实就是一种行为的监听
 * @author xubo
 * @date 2022/3/30 11:44
 */
public class PrayingMantis implements InvocationHandler {


    private BaseService baseService;

    /**
     * 这里采用的是构建传参数，可以用反射，举的第一个例子有样式代码
     * @param baseService
     */
    public PrayingMantis(BaseService baseService) {
        this.baseService = baseService;
    }

    /**
     * 螳螂主要业务，也就是监听对象
     * @param listener
     * @param method
     * @param args
     * @return
     * @throws Throwable
     */
    @Override
    public Object invoke(Object listener, Method method, Object[] args) throws Throwable {
        method.invoke(baseService,args);
        secondaryMain();
        return null;
    }

    /**
     * 这里理解增强业务，即我们可以在实现InvocationHandler里面添加其他的业务，比如日志等等
     */
    private void secondaryMain(){
        System.out.println("螳螂捕蝉 - 次要业务");
    }




}
